package com.starhub.application.collection.mapper;

import com.starhub.application.collection.entity.MetaDataEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 元数据Mapper
 * @version: V1.0
 * @author: liuhf
 * @time 2025-06-09
 */
@Mapper
public interface MetaDataMapper {
    /**
     * 插入数据到动态表
     * @param tableName 表名
     * @param entity 数据实体
     * @return 影响的行数
     */
    int insertIntoTable(@Param("tableName") String tableName, @Param("entity") MetaDataEntity entity);

    /**
     * 根据itemId更新content
     * @param tableName 表名
     * @param itemId 条目ID
     * @param content 内容
     * @return 影响的行数
     */
    int updateContentByItemId(@Param("tableName") String tableName, 
                            @Param("itemId") String itemId, 
                            @Param("content") String content);

    /**
     * 创建元数据表
     * @param tableName 表名
     * @param tableComment 表注释
     * @return 影响的行数
     */
    int createMetaTable(@Param("tableName") String tableName, @Param("tableComment") String tableComment);

    /**
     * 添加表字段
     * @param tableName 表名
     * @param fieldName 字段名
     * @param fieldType 字段类型
     * @param length 长度
     * @param precision 精度
     * @param scale 小数位
     * @param isNullable 是否可为空
     * @param defaultValue 默认值
     * @param comment 注释
     * @return 影响的行数
     */
    int addTableField(@Param("tableName") String tableName,
                     @Param("fieldName") String fieldName,
                     @Param("fieldType") String fieldType,
                     @Param("length") Integer length,
                     @Param("precision") Integer precision,
                     @Param("scale") Integer scale,
                     @Param("isNullable") boolean isNullable,
                     @Param("defaultValue") String defaultValue,
                     @Param("comment") String comment);

    /**
     * 创建索引
     * @param tableName 表名
     * @param indexName 索引名
     * @param fieldNames 字段名列表（逗号分隔）
     * @param indexType 索引类型
     * @return 影响的行数
     */
    int createIndex(@Param("tableName") String tableName,
                   @Param("indexName") String indexName,
                   @Param("fieldNames") String fieldNames,
                   @Param("indexType") String indexType);

    /**
     * 检查表是否存在
     * @param tableName 表名
     * @return 表是否存在
     */
    int isTableExists(@Param("tableName") String tableName);

    /**
     * 根据itemId删除数据
     * @param tableName 表名
     * @param itemId 条目ID
     * @return 影响的行数
     */
    int deleteByItemId(@Param("tableName") String tableName, @Param("itemId") String itemId);
} 